package com.yanyeori.framework.datasource.mybatisplus.service;

import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.yanyeori.framework.datasource.mybatisplus.mapper.BaseMapper;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * mybatis-plus增强IService
 *
 * @author chenkuan 2023/8/28
 */
public interface IService<T> extends com.baomidou.mybatisplus.extension.service.IService<T> {
    /**
     * 获取对应 entity 的 BaseMapper
     *
     * @return BaseMapper
     */
    BaseMapper<T> getBaseMapper();

    /**
     * sql批量插入
     *
     * @param entityList 实体对象集合
     */
    @Transactional(rollbackFor = Exception.class)
    default boolean insertBatch(List<T> entityList) {
        return insertBatch(entityList, DEFAULT_BATCH_SIZE);
    }

    /**
     * sql批量插入
     *
     * @param entityList 实体对象集合
     * @param batchSize  批次提交数量
     */
    boolean insertBatch(List<T> entityList, int batchSize);

    /**
     * 根据 联合主键 查询
     *
     * @param entity 实体对象
     */
    default T getByMultiId(T entity) {
        return getBaseMapper().selectByMultiId(entity);
    }

    /**
     * 根据 联合主键 选择修改
     *
     * @param entity 实体对象
     */
    default boolean updateByMultiId(T entity) {
        return SqlHelper.retBool(getBaseMapper().updateByMultiId(entity));
    }

    /**
     * 根据 联合主键 删除
     *
     * @param entity 实体对象
     */
    default boolean removeByMultiId(T entity) {
        return SqlHelper.retBool(getBaseMapper().deleteByMultiId(entity));
    }
}
